const KoaReq = require('koa2-request')
const Router = require('koa-router')
const Token = require('../model/users.js')
const jwt = require('jsonwebtoken')
const jwtsecret = 'Niu2022'
const maxTime = '30d' // '30s'、'10h'、'7d'
const userLogin = new Router()

const appid = 'wxf34bc094f3b42e5d'    // 替换成自己的申请的Appid
const secret = '061f5524521c470112cbdfe338779825'	// 替换与Appid对应的AppSecret

userLogin.get('/login', async (ctx, next) => {
	const nickname = ctx.query.name
	const jscode = ctx.query.code
	
	const wxurl = 'https://api.weixin.qq.com/sns/jscode2session?appid=' + appid + '&secret=' + secret + '&js_code=' +
		jscode +
		'&grant_type=authorization_code'

	// 将code发送至微信服务器，并接收返回的结果
	let res = await KoaReq(wxurl) // 通过koa2-request访问外部请求
	const openid = JSON.parse(res.body).openid
	// 利用jwt动态生成token，在index.js中，使用koa-jwt解析这个token，并自动核对时效性
	let userToken = jwt.sign({
		info: openid
	}, jwtsecret, {
		expiresIn: maxTime
	})
	// 如果微信返回给我们结果中没有错误，则表示请求成功，就可以获取用户微信的唯一身份标识openid
	if (!res.body.includes('errcode') && nickname != '') {
		let openidRes = await Token.findOne({
			openId: openid
		})
		// 如果用户第一次授权登录，则保存用用户的openid至数据表中
		if (!openidRes) {
			let data = new Token({
				userName: nickname,
				openId: openid
			})
			await data.save()
			ctx.body = {
				code: 2,
				msg: "授权成功",
				data: {
					token: userToken,
					nickname
				}
			}
		} else {
			// 如果用户之前授权登录过，则直接返回用户token	
			ctx.body = {
				code: 2,
				msg: "身份验证成功",
				data: {
					token: userToken,
					nickname
				}
			}
		}
	} else {
		ctx.body = {
			code: 0,
			msg: '身份不正确，请重新登录'
		}
	}
})
module.exports = userLogin
